#!/bin/bash
#
# This script prepares a Windows binary distribution of wimlib on Linux using
# MinGW-w64.  The desired architecture must be passed as the first argument.

set -e

if [ ! -e src/wim.c ]; then
	echo "This script must be run from the toplevel directory" 1>&2
	exit 1
fi

if [ $# -lt 1 ]; then
	echo "Usage: $0 i686|x86_64 [EXTRA_CONFIGURE_ARG]..." 1>&2
	exit 1
fi

ARCH="$1"
shift

case "$ARCH" in
i686|x86_64)
	;;
*)
	echo "ERROR: ARCH must be i686 or x86_64" 1>&2
	exit 1
	;;
esac

VERSION=$(grep 'AC_INIT' configure.ac | \
	  grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+[^]]*')
DESTDIR=wimlib-${VERSION}-windows-${ARCH}-bin
ZIPFILE=wimlib-${VERSION}-windows-${ARCH}-bin.zip
MAKE="make -j $(grep -c processor /proc/cpuinfo)"
WINDEPDIR=./tools/windeps
SYSROOT=$WINDEPDIR/sysroot_${ARCH}

# Prepare third party libraries

if [ ! -e $SYSROOT ]; then
	$MAKE -C $WINDEPDIR sysroot_${ARCH}
fi

# Compile wimlib

if ! grep -q "./configure --host=${ARCH}-w64-mingw32" config.log || \
	! grep -q "configure: exit 0" config.log || \
	[ $# -gt 0 ]
then
	extra_args=
	if [ $ARCH = x86_64 ]; then
		extra_args="--enable-ssse3-sha1"
	fi
	# Note: putting -static-libgcc in CC is a workaround for libtool
	# stripping it:
	# http://www.gnu.org/software/libtool/manual/libtool.html#Stripped-link-flags
	./configure --host=${ARCH}-w64-mingw32 --disable-static		\
		CC="${ARCH}-w64-mingw32-gcc -static-libgcc"		\
		CPPFLAGS="-I$SYSROOT/include"				\
		LDFLAGS="-L$SYSROOT/lib"				\
		PKG_CONFIG_PATH="$SYSROOT/lib/pkgconfig"		\
		--without-libcrypto					\
		$extra_args "$@"
	$MAKE clean
fi
$MAKE

# Create empty destination directory

rm -rf $DESTDIR
mkdir $DESTDIR

# Install binaries

cp .libs/*.{dll,exe} $DESTDIR
${ARCH}-w64-mingw32-strip $DESTDIR/*.{dll,exe}

# Install text files

cp NEWS README* COPYING* $DESTDIR
cp $WINDEPDIR/COPYING* $DESTDIR

sed -n '/^#/q; s/^[\/\* ]*//; p' src/divsufsort.c > $DESTDIR/COPYING.libdivsufsort-lite
if ! grep -q 'Copyright' $DESTDIR/COPYING.libdivsufsort-lite; then
	echo "ERROR: failed to extract libdivsufsort-lite license text" 1>&2
	exit 1
fi
(
	cd $DESTDIR
	for fil in NEWS README* COPYING*; do
		sed < $fil > ${fil}.txt -e 's/$/\r/g'
		rm $fil
	done
)


# Install man pages

mkdir $DESTDIR/doc

function gen_pdf_from_man_page() {
	local manbase=$1
	local pdf=${DESTDIR}/doc/${manbase}.pdf

	echo "Generating $pdf"

	MANPATH="./doc" man -t $manbase | ps2pdf - $pdf
}

for fil in ./doc/man1/wim*.1; do
	manbase=`basename $fil`
	cmd=${manbase%.1}
	case $cmd in
	wimlib-imagex|wimmount|wimmountrw|wimunmount)
		continue
		;;
	esac

	gen_pdf_from_man_page $cmd

	sed 's/$/\r/g' > ${DESTDIR}/${cmd}.cmd <<- EOF
		@echo off
		"%~dp0\\wimlib-imagex" ${cmd#wim} %*
	EOF
	chmod +x ${DESTDIR}/${cmd}.cmd
done

gen_pdf_from_man_page wimlib-imagex

# Install development files

mkdir $DESTDIR/devel
cp .libs/libwim.dll.a $DESTDIR/devel/libwim.lib
cp include/wimlib.h $DESTDIR/devel/

# Generate ZIP file

rm -f $ZIPFILE
(
	dir=$PWD
	cd $DESTDIR
	7z -mx9 a "$dir/$ZIPFILE" .
)
